package com.atguigu.exam.service;

import com.atguigu.exam.entity.ExamRecord;
import com.atguigu.exam.vo.ExamRankingVO;
import com.atguigu.exam.vo.StartExamVo;
import com.atguigu.exam.vo.SubmitAnswerVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 考试服务接口
 */
public interface ExamService extends IService<ExamRecord> {

    /**
     * 开始考试
     *
     * @param startExamVo 开始考试参数
     * @return 考试记录
     */
    ExamRecord startExam(StartExamVo startExamVo);

    /**
     * 根据id获取考试记录
     *
     * @param id 考试记录id
     * @return 考试记录
     */
    ExamRecord customGetExamRecordById(Integer id);

    /**
     * 提交答案
     *
     * @param examRecordId 考试记录id
     * @param answers      答案列表
     */
    void customSubmitAnswer(Integer examRecordId, List<SubmitAnswerVo> answers) throws InterruptedException;

    /**
     * 批改考试
     *
     * @param examRecordId 考试记录id
     * @return 考试记录
     */
    ExamRecord gradeExam(Integer examRecordId) throws InterruptedException;

    /**
     * 删除考试记录
     *
     * @param id 考试记录id
     */
    void customRemoveById(Integer id);

    /**
     * 获取考试排行榜数据
     *
     * @param paperId 指定试卷ID，可为空
     * @param limit   排行数量限制，可为空
     * @return 排行榜列表
     */
    List<ExamRankingVO> getExamRanking(Integer paperId, Integer limit);
}
 